﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using Leo.Entities;
using Leo.BL;
using System.IO;
using Microsoft.Practices.Unity;

namespace VeterinariaDrLeo.Controllers
{
    public class CompraController : Controller
    {
        //
        // GET: /Compra/
        [Dependency]
        public ICompraBL CompraBL { get; set; }
        [Dependency]
        public IDetalleCompraBL DetalleCompraBL { get; set; }
        [Dependency]
        public IProductoBL ProductoBL { get; set; }
        [Dependency]
        public IEmpleadoBL EmpleadoBL { get; set; }

        public ActionResult Index()
        {
            var listCompras = CompraBL.GetAllFromCompras();
            return View(listCompras);
        }
        [HttpPost]
        public ActionResult Index(string criterio = "")
        {
            var listCompra = CompraBL.GetAllFromComprasByCriterio(criterio);
            return View(listCompra);
        }

        public ActionResult Details(int id)
        {
            return View();
        }
        public ActionResult Create()
        {

            return View();
        }
        [HttpPost]
        public ActionResult Create(Compra compra)
        {
            try
            {
                CompraBL.AddCompra(compra);
                return View("index");
            }
            catch (Exception)
            {

                return View();
            }
        }

        public ActionResult Edit(int id)
        {
            var EditarCompra = CompraBL.GetAllFromCamprasById(id);

            ViewBag.Nombre = EditarCompra.Empleado.Nombres;
            ViewBag.Apellifos = EditarCompra.Empleado.Apellidos;

            EditarCompra.Empleado.Nombres = EditarCompra.Empleado.Nombres + "" + EditarCompra.Empleado.Apellidos;
            return View(EditarCompra);
        }
        [HttpPost]
        public ActionResult Edit(int id, Compra compra)
        {
            try
            {
                CompraBL.UpdateCompra(compra);
                return RedirectToAction("Edit/"+compra.Id);
            }
            catch (Exception ex)
            {

                ViewData["message"] = ex.Message;
                return View(compra);
            }
        }

        public ActionResult Delete(int id)
        {
            CompraBL.RemoveCompra(id);
            return RedirectToAction("index");
        }
        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                return RedirectToAction("index");
            }
            catch 
            {

                return View();
            }
        }

        public ActionResult CompraProdEmpleado()
        {
            var fechaActual = DateTime.Now;
            var CompraEmpleadoRep = new CompraEmpleadoRep();
            CompraEmpleadoRep.FechaEntrega = fechaActual;
            CompraEmpleadoRep.Cantidad = 1;
            return View();
        }
        [HttpPost]
        public ActionResult CompraProdEmpleado(CompraEmpleadoRep CompraEmpeladoRep)
        {
            try
            {
                Compra compraPro = new Compra()
                {
                    Id = CompraEmpeladoRep.IdCompra,
                    FechaCompra = CompraEmpeladoRep.FechaEntrega,
                    IdEmpleado = CompraEmpeladoRep.IdEmpleado,
                    DetalleCompras = CompraEmpeladoRep.DetalleCompras
                };
                CompraBL.AddCompra(compraPro);
                if (compraPro.Id!=0)
                {
                    return RedirectToAction("Edit/"+compraPro.Id);
                }
                else
                {
                    return View();
                }
            }
            catch (Exception ex)
            {

                ViewBag["message"] = ex.Message;
                CompraEmpeladoRep.FechaEntrega = DateTime.Now;
                return View(CompraEmpeladoRep);
            }
        }

        public ActionResult AutoCompletado(string q, Int32 limit, Int64 timeStamp)
        {
            var productos = ProductoBL.GetFromProductoByCriterio(q);

            var lista = from p in productos
                        //where (p.Categoria.Nombre =="")
                        select new
                        {
                            CompraId = p.Id,
                            CodigoProd = p.CodigoProducto,
                            NombreProd = p.Nombre,
                            LotePrd = p.Lote,
                            CantidadProd = p.Cantidad
                        };
            return Json(lista, JsonRequestBehavior.AllowGet);
        }
        public ActionResult AutocompletadoEmpleado(string q, Int32 limit, Int64 timestamp)
        {
            var empleados = EmpleadoBL.GEtFromEmpleadoByCriterio(q);

            var lista = from em in empleados
                        select new
                        {
                            EmpleadoId = em.Id,
                            dniEm = em.DNI,
                            NomEm = em.Nombres + ", " + em.Apellidos,
                            
                        };

            return Json(lista, JsonRequestBehavior.AllowGet);
        }

        [HttpPost]
        public ActionResult validarCantidad(int IdProducto, int Cantidad)
        {
            var producto = ProductoBL.GetFromProductoById(IdProducto);
            var ok = false;
            var msg = "No Existe..!!!";

            if (producto.Cantidad < Cantidad)
            {
                ok = true;
                msg = string.Format("Solo existe: {0}",
                  producto.Cantidad
                  );
            }

            var rpt = new
            {
                ok = ok,
                msg = msg
            };

            return Json(rpt, JsonRequestBehavior.AllowGet);
        }

        public ActionResult DeleteDetalle(int id, int idEntrega)
        {
            DetalleCompraBL.RemoveDetalleCompra(id);
            return RedirectToAction("Edit/" + idEntrega);
        }

    }
}
